/**
 * @User: vitobo
 * @Date: 2024-05-17
 * @Description: 对象的构造及初始化   static成员
 */


// static成员
// static修饰的成员变量, 称为静态成员变量;  静态成员变量不属于某个具体的对象, 是所有对象所共享的
//
// 代码块
// 1.静态代码块
// 2.实例代码块(构造代码块)
// 3.普通代码块






//
//public class Student {
//
//    public String name;
//    public int age;
//
//    // 被static修饰,classes在方法区当中
//    public static int classes;  //静态成员变量-->类变量   访问: 类名.成员名
//
//    {
//        System.out.println("实例代码块! ");
//    }
//
//    // 类加载的时候, 就被执行   且只会被执行一次
//    static{
//        classes = 5;
//        System.out.println("静态代码块! ");
//    }
//
//
//    public Student(){
//        this("gg", 18);
//        System.out.println("不带参数的构造方法");
//    }
//
//    public Student(String name, int age){
//        System.out.println("带两个参数的构造方法");
//        this.name = name;
//        this.age = age;
//    }
//
//    public void setStudent(String name, int age){
//        this.name = name;
//        this.age = age;
//    }
//
//    public void print(){
//        System.out.println(this.name + " => " + this.age + " => " + classes);
//    }
//
//    public void func(){
//        this.print();
//    }
//
//    public static void func2(){
//        // 在静态方法内部, 不能访问非静态的数据成员和成员方法
//
//    }
//
//    public static void main(String[] args) {
//        Student student1 = new Student();
//        System.out.println("==========");
//
//        Student student2 = new Student();
//    }
//
//
//
//
//    public static void main1(String[] args) {
//
//        Student student1 = new Student("bobo1", 12);
//        Student student2 = new Student("bobo2", 12);
//        Student student3 = new Student("bobo3", 12);
//
//        // 静态关键字, 静态方法的访问, 通过类名去访问    静态的不依赖对象
//        Student.classes = 3;
//        student1.print();
//
//        Student.func2();
//
//    }
//
//}



/***

 public class Student {

 // 默认初始化
 public String name;
 public int age;

 // 就地初始化,定义的同时赋值
 //    public String name = "nba";
 //    public int age = 32;

 // 构造方法: 没有返回值, 方法名和类名一致
 // 通过构造方法给对象中的成员进行初始化
 public Student(){
 // 调用本类当中 其它的构造方法
 // 必须放在构造方法里面, 必须放在第一行, 且不能循环调用
 this("gg", 18);
 System.out.println("不带参数的构造方法");
 }

 public Student(String name, int age){
 System.out.println("带两个参数的构造方法");
 this.name = name;
 this.age = age;
 }

 public void setStudent(String name, int age){
 this.name = name;
 this.age = age;
 }

 public void print(){
 System.out.println("name: " + this.name);
 System.out.println("age: " + this.age);
 }

 public void func(){
 this.print();
 }

 public static void main(String[] args) {
 // 实例化对象, 就会调用构造方法
 // 当我们没有 提供任何构造方法的时候,编译器会帮我们提供一个不带参数的构造方法
 // 当构造方法调用完成之后, 对象实际才产生了
 // 构造方法是 可以被重载
 Student student = new Student();

 Student student1 = new Student("张麻子" , 22);

 //        student.setStudent("bobo", 25);
 //        student.func();
 }
 }


 */
